<?php
/**
 * Created by PhpStorm.
 * User: Eric-pc3
 * Date: 2018/5/16
 * Time: 17:31
 */

namespace app\common\exception;

use app\common\api\ApiHelper;
use Exception;
use think\exception\Handle;
use think\exception\HttpException;
use think\exception\ValidateException;
use think\facade\Log;

/**
 * 异常接管，API专用
 * Class ExceptionHandle
 * @package app\common\exception
 */
class ExceptionHandle extends Handle
{
    public function render(Exception $e)
    {
        // 参数验证错误
        if ($e instanceof ValidateException) {
            return json($e->getError(), 422);
        }

        // 方法参数错误
        if ($e instanceof \InvalidArgumentException) {
            return json(ApiHelper::output(1,$e->getMessage()));
        }

        // 请求异常
        if ($e instanceof HttpException && request()->isAjax()) {
            return json(ApiHelper::output(2,$e->getMessage()));
        }

        // 大于0表示业务错误
        if($e instanceof BusinessException){
            return json(ApiHelper::output($e->getCode(),$e->getError()));
        }

        // 小于0表示 逻辑 错误 系统错误 需要写日志
        if($e instanceof LogicException){
            Log::error('code：' . $e->getCode() . ' error：' . $e->getError());
            return json(ApiHelper::output($e->getCode(),$e->getError()));
        }

        // 其他错误交给系统处理
        return parent::render($e);
    }
}